home *** CD-ROM | disk | FTP | other *** search
/ Macintosh Technology Seed 1996 September / Macintosh Technology Seed (September 1996) (CDRM1437020).ISO / pc / qd3d15d6 / 15d6_sdk.exe / QD3D Win32 1.5d6 / Interfaces / QD3DIO.H < prev    next >
C/C++ Source or Header  |  1996-08-21  |  25KB  |  850 lines

  1. /******************************************************************************
  2.  **                                                                              **
  3.  **     Module:        QD3DIO.h                                                 **                        
  4.  **                                                                              **
  5.  **                                                                              **
  6.  **     Purpose:    QuickDraw 3D IO API                                         **            
  7.  **                                                                              **
  8.  **                                                                              **
  9.  **                                                                              **
  10.  **     Copyright (C) 1992-1996 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                              **
  12.  **                                                                              **
  13.  *****************************************************************************/
  14. #ifndef QD3DIO_h
  15. #define QD3DIO_h
  16.  
  17. #if defined(PRAGMA_ONCE) && PRAGMA_ONCE
  18.     #pragma once
  19. #endif  /*  PRAGMA_ONCE  */
  20.  
  21. #include "QD3DDrawContext.h"
  22. #include "QD3DView.h"
  23.  
  24. #if defined(THINK_C) || defined(__SC__)
  25.     #pragma options(!pack_enums, !align_arrays)
  26.     #pragma SC options align=power
  27. #elif defined(__MWERKS__)
  28.     #pragma enumsalwaysint on
  29.     #pragma align_array_members off
  30.     #pragma options align=native
  31. #elif defined(__PPCC__)
  32.     #pragma options align=power
  33. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  34.     #pragma options enum=int
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif  /* __cplusplus */
  40.  
  41. /******************************************************************************
  42.  **                                                                              **
  43.  **                                    Basic Types                                 **                                                    
  44.  **                                                                              **
  45.  *****************************************************************************/
  46.  
  47. typedef unsigned char    TQ3Uns8;    /* 1 byte unsigned integer                 */ 
  48. typedef signed   char    TQ3Int8;    /* 1 byte signed integer                 */ 
  49. typedef unsigned short    TQ3Uns16;    /* 2 byte unsigned integer                 */ 
  50. typedef signed   short    TQ3Int16;    /* 2 byte signed integer                 */ 
  51. typedef unsigned long    TQ3Uns32;    /* 4 byte unsigned integer                 */
  52. typedef signed   long    TQ3Int32;    /* 4 byte signed integer                 */
  53.  
  54. typedef struct TQ3Uns64 {
  55. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  56.     unsigned long    hi;
  57.     unsigned long     lo;
  58. #else
  59.     unsigned long     lo;
  60.     unsigned long    hi;
  61. #endif /* OS_MACINTOSH */
  62. } TQ3Uns64;                            /* 8 byte unsigned integer                 */
  63.  
  64. typedef struct TQ3Int64 { 
  65. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  66.     signed long        hi; 
  67.     unsigned long    lo; 
  68. #else
  69.     unsigned long    lo; 
  70.     signed long        hi; 
  71. #endif /* OS_MACINTOSH */
  72. } TQ3Int64;                            /* 8 byte signed integer                 */
  73.  
  74. typedef float            TQ3Float32;    /* 4 byte floating point number             */
  75. typedef double            TQ3Float64;    /* 8 byte floating point number             */
  76.  
  77. typedef TQ3Uns32        TQ3Size;
  78.  
  79. /******************************************************************************
  80.  **                                                                              **
  81.  **                                    File Types                                 **
  82.  **                                                                              **
  83.  *****************************************************************************/
  84.  
  85. typedef enum TQ3FileModeMasks {
  86.     kQ3FileModeNormal        = 0,
  87.     kQ3FileModeStream        = 1 << 0,
  88.     kQ3FileModeDatabase        = 1 << 1,
  89.     kQ3FileModeText            = 1 << 2
  90. } TQ3FileModeMasks;
  91.  
  92. typedef unsigned long TQ3FileMode;
  93.  
  94. /******************************************************************************
  95.  **                                                                              **
  96.  **                                    Method Types                             **
  97.  **                                                                              **
  98.  *****************************************************************************/
  99.  
  100. /*
  101.  *    IO Methods
  102.  *
  103.  *    The IO system treats all objects as groups of typed information.
  104.  *    When you register your element or attribute, the "elementType" is the 
  105.  *    binary type of your object, the "elementName" the ascii type.
  106.  *    
  107.  *    All objects in the metafile are made up of a "root" or parent object which
  108.  *    defines the instantiated object type. You may define the format of your 
  109.  *    data any way you wish as long as you use the primitives types above and the
  110.  *    routines below.
  111.  *
  112.  *    Root Objects are often appended with additional child objects, called 
  113.  *    subobjects. You may append your object with other QuickDraw 3D objects.
  114.  *    
  115.  *    Writing is straightforward: an object traverses itself any other objects 
  116.  *    that make it up, then writes its own data. Writing uses two methods: 
  117.  *    TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
  118.  *
  119.  *    The TQ3XObjectTraverseMethod method should:
  120.  *    + First, Determine if the data should be written 
  121.  *        - if you don't want to write out your object after examining your
  122.  *            data, return kQ3Success in your Traverse method without calling
  123.  *            any other submit calls.
  124.  *     + Next, calculate the size of your object on disk
  125.  *     + Gather whatever state from the view you need to preserve
  126.  *         - you may access the view state NOW, as the state of the
  127.  *             view duing your TQ3XObjectWriteMethod will not be valid. You may
  128.  *             pass a temporary buffer to your write method.
  129.  *     + Submit your view write data using Q3View_SubmitWriteData
  130.  *         - note that you MUST call this before any other "_Submit" call.
  131.  *         - you may pass in a "deleteMethod" for your data. This method
  132.  *             will be called whether or not your write method succeeds or fails.
  133.  *     + Submit your subobjects to the view
  134.  *     
  135.  *     The TQ3XObjectWriteMethod method should:
  136.  *     + Write your data format to the file using the primitives routines below.
  137.  *         - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
  138.  *             method will be called upon exit of your write method.
  139.  *
  140.  *    Reading is less straightforward because your root object and
  141.  *    any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
  142.  *    is an implicit state contained in the file while reading, which you must 
  143.  *    be aware of. When you first enter the read method, you must physically 
  144.  *    read in your data format using the primitives routines until
  145.  *    
  146.  *    Q3File_IsEndOfData(file) == kQ3True
  147.  *    
  148.  *    Generally, your data format should be self-descriptive such that you do not
  149.  *    need to call Q3File_IsEndOfData to determine if you are done reading. 
  150.  *    However, this call is useful for determining zero-sized object or 
  151.  *    determining the end of an object's data.
  152.  *    
  153.  *    Once you have read in all the data, you may collect subobjects. A metafile
  154.  *    object ONLY has subobjects if it is in a container. The call
  155.  *    
  156.  *    Q3File_IsEndOfContainer(file)
  157.  *    
  158.  *    returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
  159.  *    exist.
  160.  *    
  161.  *    At this point, you may use
  162.  *    
  163.  *    Q3File_GetNextObjectType
  164.  *    Q3File_IsNextObjectOfType
  165.  *    Q3File_ReadObject
  166.  *    Q3File_SkipObject
  167.  *    
  168.  *    to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
  169.  *    is kQ3True.
  170.  * 
  171.  */
  172.  
  173. #if defined(QD3D_OBSOLETE) && QD3D_OBSOLETE
  174. /*
  175.  *    TQ3XObjectTraverseMethod
  176.  *
  177.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  178.  *    object. Sorry, custom objects will be available in the next major revision.
  179.  *
  180.  *    The "data" is a pointer to your internal element data.
  181.  *
  182.  *    The view is the current traversal view.
  183.  */
  184. typedef TQ3Status (*TQ3XObjectTraverseMethod)(
  185.     TQ3Object            object,
  186.     void                *data,
  187.     TQ3ViewObject        view);
  188.  
  189. typedef TQ3Status (*TQ3XObjectWriteMethod)(
  190.     const void            *object,
  191.     TQ3FileObject        file);
  192.  
  193. /*
  194.  *    TQ3XObjectReadDataMethod
  195.  *
  196.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  197.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  198.  *
  199.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  200.  */
  201. typedef TQ3Status (*TQ3XObjectReadDataMethod)(
  202.     TQ3Object            parentObject,
  203.     TQ3FileObject        file);
  204.  
  205. #else
  206. /*
  207.  *    TQ3XObjectTraverseMethod
  208.  *
  209.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  210.  *    object. Sorry, custom objects will be available in the next major revision.
  211.  *
  212.  *    The "data" is a pointer to your internal element data.
  213.  *
  214.  *    The view is the current traversal view.
  215.  */
  216. typedef TQ3Status (*TQ3XObjectTraverseMethod)(
  217.     TQ3Object            object,
  218.     void                *data,
  219.     TQ3ViewObject        view);
  220.  
  221. typedef TQ3Status (*TQ3XObjectWriteMethod)(
  222.     const void            *object,
  223.     TQ3FileObject        file);
  224.  
  225. /*
  226.  *    TQ3XObjectReadDataMethod
  227.  *
  228.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  229.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  230.  *
  231.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  232.  */
  233. typedef TQ3Status (*TQ3XObjectReadDataMethod)(
  234.     TQ3Object            parentObject,
  235.     TQ3FileObject        file);
  236.  
  237. #endif  /*  QD3D_OBSOLETE  */
  238.  
  239.  
  240. #define Q3FileVersion(majorVersion, minorVersion)                    \
  241.     (TQ3FileVersion) ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) |     \
  242.                        ((TQ3Uns32) minorVersion & 0xFFFF))
  243.  
  244. typedef unsigned long            TQ3FileVersion;
  245. #define kQ3FileVersionCurrent    Q3FileVersion(1,1)
  246.  
  247.  
  248. /******************************************************************************
  249.  **                                                                              **
  250.  **                                String Constants                             **
  251.  **                                                                              **
  252.  *****************************************************************************/
  253.  
  254. #define kQ3StringMaximumLength            1024
  255.  
  256.  
  257. /******************************************************************************
  258.  **                                                                              **
  259.  **                                File Routines                                 **
  260.  **                                                                              **
  261.  *****************************************************************************/
  262. /*
  263.  * Creation and accessors
  264.  */
  265. QD3D_EXPORT TQ3FileObject Q3File_New(
  266.     void);
  267.  
  268. QD3D_EXPORT TQ3Status Q3File_GetStorage(
  269.     TQ3FileObject        file,
  270.     TQ3StorageObject    *storage);
  271.  
  272. QD3D_EXPORT TQ3Status Q3File_SetStorage(
  273.     TQ3FileObject        file,
  274.     TQ3StorageObject    storage);
  275.  
  276. /*
  277.  * Opening, and accessing "open" state, closing/cancelling
  278.  */
  279. QD3D_EXPORT TQ3Status Q3File_OpenRead(
  280.     TQ3FileObject        file,
  281.     TQ3FileMode            *mode);
  282.  
  283. QD3D_EXPORT TQ3Status Q3File_OpenWrite(
  284.     TQ3FileObject        file,
  285.     TQ3FileMode            mode);
  286.  
  287. QD3D_EXPORT TQ3Status Q3File_IsOpen(
  288.     TQ3FileObject        file,
  289.     TQ3Boolean            *isOpen);
  290.  
  291. QD3D_EXPORT TQ3Status Q3File_GetMode(
  292.     TQ3FileObject        file,
  293.     TQ3FileMode            *mode);
  294.  
  295. QD3D_EXPORT TQ3Status Q3File_GetVersion(
  296.     TQ3FileObject        file,
  297.     TQ3FileVersion        *version);
  298.  
  299. QD3D_EXPORT TQ3Status Q3File_Close(
  300.     TQ3FileObject        file);
  301.  
  302. QD3D_EXPORT TQ3Status Q3File_Cancel(
  303.     TQ3FileObject        file);
  304.  
  305. /*
  306.  * Writing (Application)
  307.  */
  308. QD3D_EXPORT TQ3Status Q3View_StartWriting(
  309.     TQ3ViewObject         view,
  310.     TQ3FileObject        file);
  311.  
  312. QD3D_EXPORT TQ3ViewStatus Q3View_EndWriting(
  313.     TQ3ViewObject         view);
  314.  
  315. /*
  316.  * Reading (Application)
  317.  */
  318. QD3D_EXPORT TQ3ObjectType Q3File_GetNextObjectType(
  319.     TQ3FileObject        file);
  320.  
  321. QD3D_EXPORT TQ3Boolean Q3File_IsNextObjectOfType(
  322.     TQ3FileObject        file,
  323.     TQ3ObjectType        ofType);
  324.  
  325. QD3D_EXPORT TQ3Object Q3File_ReadObject(
  326.     TQ3FileObject        file);
  327.  
  328. QD3D_EXPORT TQ3Status Q3File_SkipObject(
  329.     TQ3FileObject        file);
  330.  
  331. QD3D_EXPORT TQ3Boolean Q3File_IsEndOfData(
  332.     TQ3FileObject        file);
  333.  
  334. QD3D_EXPORT TQ3Boolean Q3File_IsEndOfContainer(
  335.     TQ3FileObject        file,
  336.     TQ3Object            rootObject);
  337.  
  338. QD3D_EXPORT TQ3Boolean Q3File_IsEndOfFile(
  339.     TQ3FileObject        file);
  340.  
  341. /*    
  342.  * External file references
  343.  */    
  344. QD3D_EXPORT TQ3Status Q3File_SetExternalReference(
  345.     TQ3FileObject        file,
  346.     TQ3SharedObject        sharedObject);
  347.  
  348. QD3D_EXPORT void Q3Shared_SetExternalReference(
  349.     TQ3SharedObject        sharedObject,
  350.     TQ3ReferenceObject    extReferenceObj);
  351.                 
  352. QD3D_EXPORT TQ3ReferenceObject Q3Shared_GetExternalReference(
  353.     TQ3SharedObject        sharedObject);
  354.  
  355. QD3D_EXPORT TQ3ReferenceObject Q3ExternalReference_New(
  356.     unsigned long        refID,
  357.     TQ3StringObject        extFileString,
  358.     TQ3FileObject        file);
  359.     
  360. QD3D_EXPORT TQ3Status Q3ExternalReference_SetFileName(
  361.     TQ3ReferenceObject    extReference,
  362.     TQ3StringObject        cString);
  363.  
  364. /*    
  365.  * Tracking editing in read-in objects with custom elements
  366.  */    
  367. QD3D_EXPORT void Q3Shared_ClearEditTracking(
  368.     TQ3SharedObject        sharedObject);
  369.  
  370. QD3D_EXPORT unsigned long Q3Shared_GetReadInAsEdited(
  371.     TQ3SharedObject        sharedObject);
  372.     
  373.  
  374. /*    
  375.  * Reading objects inside a group one-by-one
  376.  */    
  377. typedef enum TQ3FileReadGroupStates{
  378.     kQ3FileReadWholeGroup        = 0,
  379.     kQ3FileReadObjectsInGroup    = 1 << 0,
  380.     kQ3FileCurrentlyInsideGroup    = 1 << 1
  381. } TQ3FileReadGroupStates;
  382.  
  383. typedef unsigned long TQ3FileReadGroupState;
  384.  
  385. QD3D_EXPORT TQ3Status Q3File_SetReadInGroup(
  386.     TQ3FileObject            file,
  387.     TQ3FileReadGroupState    readGroupState);
  388.     
  389. QD3D_EXPORT TQ3Status Q3File_GetReadInGroup(
  390.     TQ3FileObject            file,
  391.     TQ3FileReadGroupState    *readGroupState);
  392.  
  393. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  394.  
  395. #if 0
  396. /* If'ed out so linker doesn't complain */
  397.  
  398. QD3D_EXPORT TQ3Status Q3File_AddIncludeFilter(
  399.     TQ3FileObject        file,
  400.     TQ3ObjectType        includeType);
  401.  
  402. QD3D_EXPORT TQ3Status Q3File_AddExcludeFilter(
  403.     TQ3FileObject        file,
  404.     TQ3ObjectType        excludeType);
  405.  
  406. QD3D_EXPORT TQ3Status Q3File_ClearFilters(
  407.     TQ3FileObject        file);
  408.  
  409. #endif  /*  0  */
  410.  
  411. #endif  /*  ESCHER_VER_FUTURE  */
  412.  
  413. /*
  414.  * Idling
  415.  */
  416. typedef TQ3Status (*TQ3FileIdleMethod)(
  417.     TQ3FileObject        file,
  418.     const void            *idlerData);
  419.  
  420. QD3D_EXPORT TQ3Status Q3File_SetIdleMethod(
  421.     TQ3FileObject        file,
  422.     TQ3FileIdleMethod    idle,
  423.     const void            *idleData);
  424.  
  425. typedef void (*TQ3DataDeleteMethod)(
  426.     void                *data);
  427.     
  428. /*
  429.  * Custom object writing 
  430.  */
  431. #if defined(QD3D_OBSOLETE) && QD3D_OBSOLETE
  432. /*
  433.  *  Use Q3XView_SubmitWriteData instead...
  434.  */
  435. QD3D_EXPORT TQ3Status Q3View_SubmitWriteData(
  436.     TQ3ViewObject        view,
  437.     TQ3Size                size,    
  438.     void                *data,
  439.     TQ3DataDeleteMethod    deleteData);
  440. #endif  /*  QD3D_OBSOLETE  */
  441.  
  442. QD3D_EXPORT TQ3Status Q3XView_SubmitWriteData(
  443.     TQ3ViewObject        view,
  444.     TQ3Size                size,    
  445.     void                *data,
  446.     TQ3DataDeleteMethod    deleteData);
  447.  
  448. QD3D_EXPORT TQ3Status Q3XView_SubmitSubObjectData(
  449.     TQ3ViewObject            view,
  450.     TQ3XObjectClass            objectClass,
  451.     unsigned long            size,
  452.     void                    *data,
  453.     TQ3DataDeleteMethod        deleteData);
  454.  
  455.  
  456. /******************************************************************************
  457.  **                                                                              **
  458.  **                                Primitives Routines                             **
  459.  **                                                                              **
  460.  *****************************************************************************/
  461.  
  462. QD3D_EXPORT TQ3Status Q3NewLine_Write(
  463.     TQ3FileObject        file);
  464.  
  465. QD3D_EXPORT TQ3Status Q3Uns8_Read(
  466.     TQ3Uns8                *data,
  467.     TQ3FileObject        file);
  468.  
  469. QD3D_EXPORT TQ3Status Q3Uns8_Write(
  470.     const TQ3Uns8        data,
  471.     TQ3FileObject        file);
  472.  
  473. QD3D_EXPORT TQ3Status Q3Uns16_Read(
  474.     TQ3Uns16            *data,
  475.     TQ3FileObject        file);
  476.  
  477. QD3D_EXPORT TQ3Status Q3Uns16_Write(
  478.     const TQ3Uns16        data,
  479.     TQ3FileObject        file);
  480.  
  481. QD3D_EXPORT TQ3Status Q3Uns32_Read(
  482.     TQ3Uns32            *data,
  483.     TQ3FileObject        file);
  484.         
  485. QD3D_EXPORT TQ3Status Q3Uns32_Write(
  486.     const TQ3Uns32        data,
  487.     TQ3FileObject        file);
  488.  
  489. QD3D_EXPORT TQ3Status Q3Int32_Read(
  490.     TQ3Int32            *data,
  491.     TQ3FileObject        file);
  492.             
  493. QD3D_EXPORT TQ3Status Q3Int32_Write(
  494.     const TQ3Int32        data,
  495.     TQ3FileObject        file);
  496.             
  497. QD3D_EXPORT TQ3Status Q3Uns64_Read(
  498.     TQ3Uns64            *data,
  499.     TQ3FileObject        file);
  500.         
  501. QD3D_EXPORT TQ3Status Q3Uns64_Write(
  502.     const TQ3Uns64        data,
  503.     TQ3FileObject        file);
  504.  
  505. QD3D_EXPORT TQ3Status Q3Float32_Read(
  506.     TQ3Float32            *data,
  507.     TQ3FileObject        file);
  508.  
  509. QD3D_EXPORT TQ3Status Q3Float32_Write(
  510.     const TQ3Float32    data,
  511.     TQ3FileObject        file);
  512.  
  513. QD3D_EXPORT TQ3Status Q3Float64_Read(
  514.     TQ3Float64            *data,
  515.     TQ3FileObject        file);
  516.  
  517. QD3D_EXPORT TQ3Status Q3Float64_Write(
  518.     const TQ3Float64    data,
  519.     TQ3FileObject        file);
  520.  
  521. QD3D_EXPORT TQ3Size Q3Size_Pad(
  522.     TQ3Size                size);
  523.  
  524. /*
  525.  * Pass a pointer to a buffer of kQ3StringMaximumLength bytes
  526.  */
  527. QD3D_EXPORT TQ3Status Q3String_Read(
  528.     char                *data,
  529.     unsigned long        *length,
  530.     TQ3FileObject        file);
  531.  
  532. QD3D_EXPORT TQ3Status Q3String_Write(
  533.     const char            *data,
  534.     TQ3FileObject        file);
  535.  
  536. /* 
  537.  * This call will read Q3Size_Pad(size) bytes,
  538.  *    but only place size bytes into data.
  539.  */
  540. QD3D_EXPORT TQ3Status Q3RawData_Read(
  541.     unsigned char        *data,
  542.     unsigned long        size,
  543.     TQ3FileObject        file);
  544.  
  545. /* 
  546.  * This call will write Q3Size_Pad(size) bytes,
  547.  *    adding 0's to pad to the nearest 4 byte boundary.
  548.  */
  549. QD3D_EXPORT TQ3Status Q3RawData_Write(
  550.     const unsigned char    *data,
  551.     unsigned long        size,
  552.     TQ3FileObject        file);
  553.  
  554. /******************************************************************************
  555.  **                                                                              **
  556.  **                        Convenient Primitives Routines                         **
  557.  **                                                                              **
  558.  *****************************************************************************/
  559.  
  560. QD3D_EXPORT TQ3Status Q3Point2D_Read(
  561.     TQ3Point2D                    *point2D,
  562.     TQ3FileObject                file);
  563.  
  564. QD3D_EXPORT TQ3Status Q3Point2D_Write(
  565.     const TQ3Point2D            *point2D,
  566.     TQ3FileObject                file);
  567.  
  568. QD3D_EXPORT TQ3Status Q3Point3D_Read(
  569.     TQ3Point3D                    *point3D,
  570.     TQ3FileObject                file);
  571.  
  572. QD3D_EXPORT TQ3Status Q3Point3D_Write(
  573.     const TQ3Point3D            *point3D,
  574.     TQ3FileObject                file);
  575.     
  576. QD3D_EXPORT TQ3Status Q3RationalPoint3D_Read(
  577.     TQ3RationalPoint3D            *point3D,
  578.     TQ3FileObject                file);
  579.  
  580. QD3D_EXPORT TQ3Status Q3RationalPoint3D_Write(
  581.     const TQ3RationalPoint3D    *point3D,
  582.     TQ3FileObject                file);
  583.  
  584. QD3D_EXPORT TQ3Status Q3RationalPoint4D_Read(
  585.     TQ3RationalPoint4D            *point4D,
  586.     TQ3FileObject                file);
  587.  
  588. QD3D_EXPORT TQ3Status Q3RationalPoint4D_Write(
  589.     const TQ3RationalPoint4D    *point4D,
  590.     TQ3FileObject                file);
  591.  
  592. QD3D_EXPORT TQ3Status Q3Vector2D_Read(
  593.     TQ3Vector2D                    *vector2D,
  594.     TQ3FileObject                file);
  595.  
  596. QD3D_EXPORT TQ3Status Q3Vector2D_Write(
  597.     const TQ3Vector2D            *vector2D,
  598.     TQ3FileObject                file);
  599.  
  600. QD3D_EXPORT TQ3Status Q3Vector3D_Read(
  601.     TQ3Vector3D                    *vector3D,
  602.     TQ3FileObject                file);
  603.  
  604. QD3D_EXPORT TQ3Status Q3Vector3D_Write(
  605.     const TQ3Vector3D            *vector3D,
  606.     TQ3FileObject                file);
  607.  
  608. QD3D_EXPORT TQ3Status Q3Matrix4x4_Read(
  609.     TQ3Matrix4x4                *matrix4x4,
  610.     TQ3FileObject                file);
  611.  
  612. QD3D_EXPORT TQ3Status Q3Matrix4x4_Write(
  613.     const TQ3Matrix4x4            *matrix4x4,
  614.     TQ3FileObject                file);
  615.  
  616. QD3D_EXPORT TQ3Status Q3Tangent2D_Read(
  617.     TQ3Tangent2D                *tangent2D,
  618.     TQ3FileObject                file);
  619.  
  620. QD3D_EXPORT TQ3Status Q3Tangent2D_Write(
  621.     const TQ3Tangent2D            *tangent2D,
  622.     TQ3FileObject                file);
  623.  
  624. QD3D_EXPORT TQ3Status Q3Tangent3D_Read(
  625.     TQ3Tangent3D                *tangent3D,
  626.     TQ3FileObject                file);
  627.  
  628. QD3D_EXPORT TQ3Status Q3Tangent3D_Write(
  629.     const TQ3Tangent3D            *tangent3D,
  630.     TQ3FileObject                file);
  631.  
  632. /*    
  633.  *  This call affects only text Files - it is a no-op in binary files 
  634.  */
  635. QD3D_EXPORT TQ3Status Q3Comment_Write(
  636.     char                        *comment,
  637.     TQ3FileObject                file);
  638.  
  639. /******************************************************************************
  640.  **                                                                              **
  641.  **                                Unknown Object                                 **
  642.  **                                                                              **
  643.  **        Unknown objects are generated when reading files which contain         **
  644.  **        custom data which has not been registered in the current             **
  645.  **        instantiation of QuickDraw 3D.                                         **
  646.  **                                                                              **
  647.  *****************************************************************************/
  648.  
  649. QD3D_EXPORT TQ3ObjectType Q3Unknown_GetType(
  650.     TQ3UnknownObject        unknownObject);
  651.  
  652. QD3D_EXPORT TQ3Status Q3Unknown_GetDirtyState(
  653.     TQ3UnknownObject        unknownObject,
  654.     TQ3Boolean                *isDirty);
  655.  
  656. QD3D_EXPORT TQ3Status Q3Unknown_SetDirtyState(
  657.     TQ3UnknownObject        unknownObject,
  658.     TQ3Boolean                isDirty);
  659.  
  660.  
  661. /******************************************************************************
  662.  **                                                                              **
  663.  **                            Unknown Text Routines                             **
  664.  **                                                                              **
  665.  *****************************************************************************/
  666.  
  667. typedef struct TQ3UnknownTextData {
  668.     char                    *objectName;    /* '\0' terminated */
  669.     char                    *contents;        /* '\0' terminated */
  670. } TQ3UnknownTextData;
  671.  
  672. QD3D_EXPORT TQ3Status Q3UnknownText_GetData(
  673.     TQ3UnknownObject        unknownObject,
  674.     TQ3UnknownTextData        *unknownTextData);
  675.  
  676. QD3D_EXPORT TQ3Status Q3UnknownText_EmptyData(
  677.     TQ3UnknownTextData        *unknownTextData);
  678.  
  679.  
  680. /******************************************************************************
  681.  **                                                                              **
  682.  **                            Unknown Binary Routines                             **
  683.  **                                                                              **
  684.  *****************************************************************************/
  685.  
  686. typedef struct TQ3UnknownBinaryData {
  687.     TQ3ObjectType            objectType;
  688.     unsigned long            size;
  689.     TQ3Endian                byteOrder;
  690.     char                    *contents;
  691. } TQ3UnknownBinaryData;
  692.  
  693. QD3D_EXPORT TQ3Status Q3UnknownBinary_GetData(
  694.     TQ3UnknownObject        unknownObject,
  695.     TQ3UnknownBinaryData    *unknownBinaryData);
  696.  
  697. QD3D_EXPORT TQ3Status Q3UnknownBinary_EmptyData(
  698.     TQ3UnknownBinaryData    *unknownBinaryData);
  699.  
  700.  
  701. /******************************************************************************
  702.  **                                                                              **
  703.  **                            ViewHints routines                                 **
  704.  **                                                                              **
  705.  **        ViewHints are an object in a metafile to give you some hints on how     **
  706.  **        to render a scene.    You may create a view with any of the objects     **
  707.  **        retrieved from it, or you can just throw it away.                     **
  708.  **                                                                              **
  709.  **        To write a view hints to a file, create a view hints object from a     **
  710.  **        view and write the view hints.                                         **
  711.  **                                                                              **
  712.  *****************************************************************************/
  713.  
  714. QD3D_EXPORT TQ3ViewHintsObject Q3ViewHints_New(
  715.     TQ3ViewObject            view);
  716.  
  717. QD3D_EXPORT TQ3Status Q3ViewHints_SetRenderer(
  718.     TQ3ViewHintsObject        viewHints,
  719.     TQ3RendererObject        renderer);
  720.  
  721. QD3D_EXPORT TQ3Status Q3ViewHints_GetRenderer(
  722.     TQ3ViewHintsObject        viewHints,
  723.     TQ3RendererObject        *renderer);
  724.  
  725. QD3D_EXPORT TQ3Status Q3ViewHints_SetCamera(
  726.     TQ3ViewHintsObject        viewHints,
  727.     TQ3CameraObject            camera);
  728.  
  729. QD3D_EXPORT TQ3Status Q3ViewHints_GetCamera(
  730.     TQ3ViewHintsObject        viewHints,
  731.     TQ3CameraObject            *camera);
  732.  
  733. QD3D_EXPORT TQ3Status Q3ViewHints_SetLightGroup(
  734.     TQ3ViewHintsObject        viewHints,
  735.     TQ3GroupObject            lightGroup);
  736.  
  737. QD3D_EXPORT TQ3Status Q3ViewHints_GetLightGroup(
  738.     TQ3ViewHintsObject        viewHints,
  739.     TQ3GroupObject            *lightGroup);
  740.  
  741. QD3D_EXPORT TQ3Status Q3ViewHints_SetAttributeSet(
  742.     TQ3ViewHintsObject        viewHints,
  743.     TQ3AttributeSet            attributeSet);
  744.  
  745. QD3D_EXPORT TQ3Status Q3ViewHints_GetAttributeSet(
  746.     TQ3ViewHintsObject        viewHints,
  747.     TQ3AttributeSet            *attributeSet);
  748.  
  749. QD3D_EXPORT TQ3Status Q3ViewHints_SetDimensionsState(
  750.     TQ3ViewHintsObject        viewHints,
  751.     TQ3Boolean                isValid);
  752.     
  753. QD3D_EXPORT TQ3Status Q3ViewHints_GetDimensionsState(
  754.     TQ3ViewHintsObject        viewHints,
  755.     TQ3Boolean                *isValid);
  756.  
  757. QD3D_EXPORT TQ3Status Q3ViewHints_SetDimensions(
  758.     TQ3ViewHintsObject        viewHints,
  759.     unsigned long            width,
  760.     unsigned long            height);
  761.  
  762. QD3D_EXPORT TQ3Status Q3ViewHints_GetDimensions(
  763.     TQ3ViewHintsObject        viewHints,
  764.     unsigned long            *width,
  765.     unsigned long            *height);
  766.  
  767. QD3D_EXPORT TQ3Status Q3ViewHints_SetMaskState(
  768.     TQ3ViewHintsObject        viewHints,
  769.     TQ3Boolean                isValid);
  770.  
  771. QD3D_EXPORT TQ3Status Q3ViewHints_GetMaskState(
  772.     TQ3ViewHintsObject        viewHints,
  773.     TQ3Boolean                *isValid);
  774.  
  775. QD3D_EXPORT TQ3Status Q3ViewHints_SetMask(    
  776.     TQ3ViewHintsObject        viewHints,
  777.     const TQ3Bitmap            *mask);
  778.  
  779. QD3D_EXPORT TQ3Status Q3ViewHints_GetMask(    
  780.     TQ3ViewHintsObject        viewHints,
  781.     TQ3Bitmap                *mask);
  782.  
  783. /* 
  784.  *  Call Q3Bitmap_Empty when done with the mask    
  785.  */
  786.  
  787. QD3D_EXPORT TQ3Status Q3ViewHints_SetClearImageMethod(
  788.     TQ3ViewHintsObject                viewHints,
  789.     TQ3DrawContextClearImageMethod    clearMethod);
  790.  
  791. QD3D_EXPORT TQ3Status Q3ViewHints_GetClearImageMethod(
  792.     TQ3ViewHintsObject                viewHints,
  793.     TQ3DrawContextClearImageMethod    *clearMethod);
  794.  
  795. QD3D_EXPORT TQ3Status Q3ViewHints_SetClearImageColor(
  796.     TQ3ViewHintsObject        viewHints,
  797.     const TQ3ColorARGB         *color);
  798.  
  799. QD3D_EXPORT TQ3Status Q3ViewHints_GetClearImageColor(
  800.     TQ3ViewHintsObject        viewHints,
  801.     TQ3ColorARGB             *color);
  802.  
  803. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  804.  
  805. QD3D_EXPORT TQ3Status Q3ViewHints_SetBackgroundShader(
  806.     TQ3ViewHintsObject        viewHints,
  807.     TQ3ShaderObject            backgroundShader);
  808.  
  809. QD3D_EXPORT TQ3Status Q3ViewHints_GetBackgroundShader(
  810.     TQ3ViewHintsObject        viewHints,
  811.     TQ3ShaderObject            *backgroundShader);
  812.  
  813. QD3D_EXPORT TQ3Status Q3ViewHints_SetAtmosphericShader(
  814.     TQ3ViewHintsObject        viewHints,
  815.     TQ3ShaderObject            atmospheric);
  816.  
  817. QD3D_EXPORT TQ3Status Q3ViewHints_GetAtmosphericShader(
  818.     TQ3ViewHintsObject        viewHints,
  819.     TQ3ShaderObject            *atmospheric);
  820.  
  821. QD3D_EXPORT TQ3Status Q3ViewHints_SetGlobalTime(
  822.     TQ3ViewHintsObject        viewHints,
  823.     float                    time);
  824.     
  825. QD3D_EXPORT TQ3Status Q3ViewHints_GetGlobalTime(
  826.     TQ3ViewHintsObject        viewHints,
  827.     float                    *time);
  828.  
  829. QD3D_EXPORT TQ3Status Q3ViewHints_SetAnimationDuration(
  830.     TQ3ViewHintsObject        viewHints,
  831.     float                    duration);
  832.     
  833. QD3D_EXPORT TQ3Status Q3ViewHints_GetAnimationDuration(
  834.     TQ3ViewHintsObject        viewHints,
  835.     float                    *duration);
  836.  
  837. #endif    /*  ESCHER_VER_FUTURE  */
  838.  
  839. #ifdef __cplusplus
  840. }
  841. #endif    /* __cplusplus */
  842.  
  843. #if defined(__MWERKS__)
  844.     #pragma enumsalwaysint reset
  845. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  846.     #pragma options enum=reset
  847. #endif
  848.  
  849. #endif /* QD3DIO_h */
  850.